/*
 * Copyright  1990-2006 Sun Microsystems, Inc. All Rights Reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License version
 * 2 only, as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License version 2 for more details (a copy is
 * included at /legal/license.txt).
 *
 * You should have received a copy of the GNU General Public License
 * version 2 along with this work; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA
 *
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
 * Clara, CA 95054 or visit www.sun.com if you need additional
 * information or have any questions.
 */

package com.sun.jumpimpl.module.presentation;

import com.sun.jump.module.presentation.JUMPPresentationModule;
import com.sun.jump.module.presentation.JUMPPresentationModuleFactory;

import java.util.Map;
import java.util.HashMap;

public class PresentationModuleFactoryImpl extends JUMPPresentationModuleFactory {
    private Map configMap;
    private HashMap presentationToModule;
    
    /**
     * load this module with the given properties
     * @param map properties of this module
     */
    public void load(Map map) {
        this.configMap = map;
    }
    /**
     * unload the module
     */
    public void unload() {
    }
    
    /**
     * Returns a <code>JUMPPresentationModule</code> for the specified
     *   presentation mode.
     */
    public synchronized JUMPPresentationModule getModule(String presentation) {
        
        if (presentationToModule == null) {
  	   presentationToModule = new HashMap();
        }

	JUMPPresentationModule module = (JUMPPresentationModule) presentationToModule.get(presentation);

	if (module == null) {

	   try {
	      Class moduleClass = Class.forName(presentation);
              module = (JUMPPresentationModule) moduleClass.newInstance();

	      module.load(configMap);
	      presentationToModule.put(presentation, module);
           } catch (Exception e) { 
              e.printStackTrace();
           }

        }

	return module;
    }
    
}

